package entity

import (
	dom "a-common/domain"
	"time"
	// "github.com/vmihailenco/msgpack"
)

const (
	SEX_MAN    = "0"
	SEX_WOMAN  = "1"
	SEX_UNKNOW = "2"
)

// AppUser 系统用户表
type AppUser struct {
	UserId      int64     `xorm:"pk autoincr notnull"`        // 用户ID
	UserName    string    `xorm:"varchar(30) notnull unique"` // 用户账号
	NickName    string    `xorm:"varchar(30) notnull unique"` // 用户昵称
	UserType    string    `xorm:"varchar(2) default('00')"`   // 用户类型（00系统用户）
	Email       string    `xorm:"varchar(50)"`                // 用户邮箱
	Phonenumber string    `xorm:"varchar(20)"`                // 电话号码
	Address     string    `xorm:"varchar(255)"`               // 地址
	Sex         string    `xorm:"varchar(1) default(2)"`      // 用户性别（0男 1女 2未知）
	Avatar      string    `xorm:"varchar(100)"`               // 头像地址
	Password    string    `xorm:"varchar(100)"`               // 密码
	Status      string    `xorm:"varchar(1)"`                 // 帐号状态（0正常 1停用）
	LoginIp     string    `xorm:"varchar(128)"`               // 最后登录IP
	Alone       string    `xorm:"varchar(1) default('1')"`    // 单独登陆（1是 0否）
	LoginToken  string    `xorm:"varchar(255)"`               // 登陆Token
	LoginDate   time.Time // 最后登录时间

	dom.BaseStruct `xorm:"extends"`
}

// AppUserVo 映射
type AppUserVo struct {
	UserId      int64    `json:"userId,omitempty" xorm:"pk"`
	UserName    string   `json:"userName,omitempty"`
	UserType    string   `json:"userType,omitempty"`
	Password    string   `json:"-"`
	NickName    string   `json:"nickName,omitempty"`
	Avatar      string   `json:"avatar,omitempty"`
	Phonenumber string   `json:"phonenumber,omitempty"`
	Address     string   `json:"address,omitempty"`
	Status      string   `json:"status,omitempty"`
	Email       string   `json:"email,omitempty"`
	Sex         string   `json:"sex" form:"sex"`
	LoginIp     string   `json:"loginIp" form:"loginIp"`
	LoginDate   dom.Time `json:"loginDate" form:"loginDate"`
}

// AppUserPageVo 页面
type AppUserPageVo struct {
	AppUserVo    `xorm:"extends"`
	dom.BaseJson `xorm:"extends"`
}

// UserDto 传输
type UserDto struct {
	AppUserPageVo
	Params dom.ParamTime `json:"params"`
	dom.PageDto

	RoleId  int64   `json:"roleId" xorm:"-"`
	UserIds []int64 `json:"userIds" xorm:"-"`
	RoleIds []int64 `json:"roleIds" xorm:"-"`
	PostIds []int64 `json:"postIds" xorm:"-"`

	OldPassword string `json:"oldPassword" xorm:"-"`
	NewPassword string `json:"newPassword" xorm:"-"`
}

func (m *UserDto) Validator() error {
	if m.PageNum < 1 {
		m.PageNum = 1
	}
	if m.PageSize < 1 {
		m.PageSize = 10
	}
	return nil
}

// AppUserExportVo 导出
type AppUserExportVo struct {
	UserId      int64    `excel:"name:用户ID;" xorm:"pk"`
	UserName    string   `excel:"name:登录名称;"`
	NickName    string   `excel:"name:用户名称;"`
	Email       string   `excel:"name:用户邮箱;"`
	Phonenumber string   `excel:"name:手机号码;"`
	Sex         string   `excel:"name:用户性别;replace:0_男,1_女,2_未知;"`
	Status      string   `excel:"name:帐号状态;replace:0_正常,1_停用;"`
	LoginIp     string   `excel:"name:最后登录IP;"`
	LoginDate   dom.Time `excel:"name:最后登录时间;"`
	DeptName    string   `excel:"name:部门名称;"`
	Leader      string   `excel:"name:部门负责人;"`
}

// AppUserImportVo 导入
type AppUserImportVo struct {
	UserId      int64  `json:"userId,omitempty" excel:"name:用户ID;" xorm:"pk"`
	UserName    string `json:"userName,omitempty" excel:"name:登录名称;"`
	NickName    string `json:"nickName,omitempty" excel:"name:用户名称;"`
	Email       string `json:"email,omitempty" excel:"name:用户邮箱;"`
	Phonenumber string `json:"phonenumber,omitempty" excel:"name:手机号码;"`
	Sex         string `json:"sex" excel:"name:用户性别;replace:0_男,1_女,2_未知;"`
	Status      string `json:"status,omitempty" excel:"name:帐号状态;replace:0_正常,1_停用;"`
}

// AppUserSelectListVo 用户下拉列表
type AppUserSelectListVo struct {
	UserId   int64  `json:"userId,omitempty" xorm:"pk"`
	UserName string `json:"userName,omitempty"`
}
